﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcademiaDAO;
using AcademiaEntidades;
using System.Web.Security;

public partial class Administracion_RegistrarCurso : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Para controlar el botan para atras del navegador
        if (Session["Usuario"] == null)
            Response.Redirect("~/Publico/Login.aspx");
        if (!Page.IsPostBack)
        {
            cargarNivelCurso();
            cargarHorario();
            panelProfesor.Visible = false;
            ViewState["Orden"] = "Nombre";
            cargarSesion();//Cargar los datos de session
        }
    }
    private void cargarSesion()
    {
        lblUsuarioLogueado.Text = ((Usuarios)Session["Usuario"]).Usuario;
        lblRolLogueado.Text = ((Usuarios)Session["Usuario"]).Rol;
    }
    //Metodo para cargar los horarios
    private void cargarHorario()
    {
        try
        {
            List<Horario> listaHorario = CursoDAO.obtenerHorarios();
            grillaHorarios.DataSource = listaHorario;
            grillaHorarios.DataKeyNames = new string[] { "IdHorario" };
            grillaHorarios.DataBind();
            if (listaHorario.Count != 0)
            {
                lblResHorario.Text = "Operacion Exitosa...";
                lblResHorario.ForeColor = System.Drawing.Color.Green;
            }
            else
            {
                lblResHorario.Text = "No hay Datos de horario para mostrar...";
                lblResHorario.ForeColor = System.Drawing.Color.Red;
            }
            
        }
        catch (Exception ex)
        {
            lblResHorario.Text = ex.Message.ToString();
            lblResHorario.ForeColor = System.Drawing.Color.Red;
        }
    }//Fin del metodo cargarHorario...
    //Metodo para cargar el nivel del curso
    private void cargarNivelCurso()
    {
        try
        {
            ddlNivelCurso.DataSource = NivelCursoDAO.ConsultarTodos();
            ddlNivelCurso.DataTextField = "Nivel";
            ddlNivelCurso.DataValueField = "IdNivelCurso";
            ddlNivelCurso.DataBind();
        }
        catch (Exception ex)
        {
            lblMenNivelCurso.Text = ex.Message.ToString();
            lblMenNivelCurso.ForeColor = System.Drawing.Color.Red;
        }
    }//Fin del metodo cargarNivelCurso...
    protected void btnBuscar_Click1(object sender, EventArgs e)
    {
        limpiarBuscar();
        panelProfesor.Visible = true;
    }
    //Metodos para limpiar los textbox
    protected void limpiarBuscar()
    {
        txtLegajoBus.Text = string.Empty;
        txtNombreBus.Text = string.Empty;
        txtApellidoBus.Text = string.Empty;
        lblResultadoBus.Text = string.Empty;
    }//Fin metodo limpiarBuscar()
    protected void btnVolverBus_Click(object sender, EventArgs e)
    {
        limpiarBuscar();
        panelProfesor.Visible = false;
    }
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        limpiarBuscar();
    }
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        //Hago una validacion del lado del servidor
        if (!Page.IsValid)
        {
            lblResultadoBus.Text = "Debe ingresar un numero en el campo legajo";
            lblResultadoBus.ForeColor = System.Drawing.Color.Red;
            return;
        }

        cargarGrillaProfesor();
    }
    private void cargarGrillaProfesor()
    {
        //Declaro variables aux para almacenar lo que tienen los textbox
        List<Profesor> listaProfesor = new List<Profesor>();
        string nom = null;
        string ape = null;
        int? leg = null;
        if (txtNombreBus.Text != string.Empty)
            nom = txtNombreBus.Text;
        if (txtLegajoBus.Text != string.Empty)
            leg = int.Parse(txtLegajoBus.Text);
        if (txtApellidoBus.Text != string.Empty)
            ape = txtApellidoBus.Text;
        try
        {
            listaProfesor = ProfesorDAO.obtenerTodosProfesor(ViewState["Orden"].ToString(), nom, leg, ape);
        }
        catch (Exception ex)
        {
            lblResultadoBus.Text = ex.Message.ToString();
            lblResultadoBus.ForeColor = System.Drawing.Color.Red;
        }

        grillaProfesores.DataSource = listaProfesor;
        //Se establece identificador unico de la fila
        grillaProfesores.DataKeyNames = new string[] { "IdProfesor" };
        grillaProfesores.DataBind();
        if (listaProfesor.Count != 0)
        {
            lblResultadoBus.Text = "Busqueda Exitosa...";
            lblResultadoBus.ForeColor = System.Drawing.Color.Green;
        }
        else
        {
            lblResultadoBus.Text = "No hay resultados para esa busqueda...";
            lblResultadoBus.ForeColor = System.Drawing.Color.Red;
        }

    }
    protected void btnVolver_Click(object sender, EventArgs e)
    {
        //Vuelve a la pagina de inicio de Administracion
        Response.Redirect("~/Administracion/Administracion.aspx");
    }
    protected void btnConsultarCursos_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Administracion/ConsultaCursos.aspx");
    }
    protected void grillaHorarios_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Cuando selecciono un horario agregalo a una lista de Horarios
        //Con esa misma lista cargar la otra grilla y controlar que no se agreguen horarios repetidos
        int idHorario = int.Parse(grillaHorarios.SelectedDataKey.Value.ToString());
        Horario horario = new Horario();
        try
        {
            horario = CursoDAO.obtenerHorarioXId(idHorario);
            
        }
        catch (Exception ex)
        {
            lblResOperacion.Text = ex.Message.ToString();
            lblResOperacion.ForeColor = System.Drawing.Color.Red;
        }
        List<Horario> listaHorario;
        if (Session["ListaHorario"] != null)
            listaHorario = (List<Horario>)Session["ListaHorario"];
        else
            listaHorario = new List<Horario>();

        //Controlo que no se repita el horario a un curso
        if (!contieneHorarioLista(horario.IdHorario, listaHorario))
        {
            listaHorario.Add(horario);
            Session["ListaHorario"] = listaHorario;
            grillaHorarioCurso.DataSource = listaHorario;
            grillaHorarioCurso.DataBind();

            horario = null;
            lblResOperacion.Text = string.Empty;
        }
        else
        {
            lblResOperacion.Text = "Ese Horario ya fue asignado...Seleccione otro";
            lblResOperacion.ForeColor = System.Drawing.Color.Red;
            horario = null;
            return;
        }
    }
    //Metodo para controlar que no se repita un horario a un curso
    private bool contieneHorarioLista(int id, List<Horario> listaHorario)
    {
        foreach (Horario hora in listaHorario)
        {
            if (hora.IdHorario == id)
                return true;
        }
        return false;
    }
    protected void btnCerrarSesion_Click(object sender, EventArgs e)
    {
        ////Eliminar la cookie
        //Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now;
        ////Terminar la Sesion
        //FormsAuthentication.SignOut();
        //Response.Redirect("~/Publico/InicioWF.aspx");

        //************************************************************
        //Otra forma de eliminar la cookie del equipo del usuario
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            HttpCookie paraBorrar = new HttpCookie(FormsAuthentication.FormsCookieName);
            paraBorrar.Expires = DateTime.Now.AddDays(-1d);
            Response.Cookies.Add(paraBorrar);
        }
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Publico/InicioWF.aspx");
    }
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        //Recuperar los datos del curso...obtengo un Curso
        //Recupero la lista de session y controlo que al menos tenga un horario
        //Guardo y muestro un mensaje y limpio todo
        if (!Page.IsValid)
        {
            lblResOperacion.Text = "Existen campos invalidos...";
            lblResOperacion.ForeColor = System.Drawing.Color.Red;
            return;
        }
        if (Session["ListaHorario"] == null)
        {
            lblResOperacion.Text = "Se debe asignar por lo menos un horario";
            lblResOperacion.ForeColor = System.Drawing.Color.Red;
            return;
        }
        List<Horario> listaHorario = (List<Horario>)Session["ListaHorario"];
        Curso curso = new Curso();
        curso.IdNivelCurso = int.Parse(ddlNivelCurso.SelectedValue);
        curso.Nombre = txtNomCurso.Text;
        curso.Precio = decimal.Parse(txtPrecioCurso.Text);
        curso.NumeroAula = int.Parse(txtNumAula.Text);
        curso.IdProfesor = int.Parse(Session["IdProfesor"].ToString());
        
        try
        {
            CursoDAO.guardarCursoHorario(curso, listaHorario);
            lblResOperacion.Text = "La operacion se realizo con exito...";
            lblResOperacion.ForeColor = System.Drawing.Color.Green;
        }
        catch (Exception ex)
        {
            lblResOperacion.Text = ex.Message.ToString();
            lblResOperacion.ForeColor = System.Drawing.Color.Red;
        }

        limpiarCurso();
    }
    private void limpiarCurso()
    {
        txtNomCurso.Text = string.Empty;
        txtPrecioCurso.Text = string.Empty;
        txtNumAula.Text = string.Empty;
        txtLegajo.Text = string.Empty;
        Session["IdProfesor"] = null;
        Session["ListaHorario"] = null;
        //Limpio la grillaHorarioCurso
        grillaHorarioCurso.DataSource = null;
        grillaHorarioCurso.DataBind();
    }
    protected void grillaProfesores_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grillaProfesores.PageIndex = e.NewPageIndex;
        cargarGrillaProfesor();
    }
    protected void grillaProfesores_SelectedIndexChanged(object sender, EventArgs e)
    {
        int idProfesor = int.Parse(grillaProfesores.SelectedDataKey.Value.ToString());
        Profesor profe;
        try
        {
            profe = ProfesorDAO.obtenerProfesorPorId(idProfesor);
            txtLegajo.Text = profe.Legajo.ToString();
            Session["IdProfesor"] = profe.IdProfesor;
        }
        catch (Exception ex)
        {
            lblResLegajo.Text = ex.Message.ToString();
            lblResLegajo.ForeColor = System.Drawing.Color.Red;
        }
        panelProfesor.Visible = false;
    }
    protected void grillaProfesores_Sorting(object sender, GridViewSortEventArgs e)
    {
        ViewState["Orden"] = e.SortExpression;
        cargarGrillaProfesor();
    }
}